/****************************************************************************
**
** Copyright (C) 2012 Róbert Márki
**
** This file is part of Web Feeds.
**
** Web Feeds is free software: you can redistribute it and/or modify
** it under the terms of the GNU General Public License as published by
** the Free Software Foundation, either version 3 of the License, or
** (at your option) any later version.
**
** Web Feeds is distributed in the hope that it will be useful,
** but WITHOUT ANY WARRANTY; without even the implied warranty of
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
** GNU General Public License for more details.
**
** You should have received a copy of the GNU General Public License
** along with Web Feeds.  If not, see <http://www.gnu.org/licenses/>.
****************************************************************************/

import QtQuick 1.1
import com.nokia.meego 1.0
import WebFeeds 1.0
import NewsBlur 1.0

SelectionDialog {
    id: root
    titleText: qsTr("Select folder")
    property alias rootItem: listModel.rootItem
    property alias itemToExclude: listModel.itemToExclude

    function init() {
        if(listModel.rootItem) {
            listModel.clear();
            listModel.addChildFolders(listModel.rootItem, "", true);
        }
    }

    function selectedItem() {
        if(root.selectedIndex != -1) {
            return listModel.get(root.selectedIndex).item;
        }
    }

    model: ListModel {
        id: listModel
        property PageItem rootItem;
        property PageItem itemToExclude

        function addChildFolders(item, prefix, enabled) {            
            if((item.itemType == NewsBlurItem.FolderItem)
               || (item.itemType == NewsBlurItem.RootItem)) {
                listModel.append({"name": prefix + item.title,
                                  "item": item,
                                  "enabled": (enabled && (item != listModel.itemToExclude.parent))});
                var childItem;
                for(var i = 0; i < item.childCount; ++i) {
                    childItem = item.child(i);
                    var childEnabled = enabled;
                    if(childItem == listModel.itemToExclude)
                        childEnabled = false;
                    addChildFolders(childItem, prefix + "  ", childEnabled);
                }
            }
        }
    }

    delegate: Component {
        id: defaultDelegate

        Item {
            id: delegateItem
            property bool selected: index == selectedIndex;

            height: root.platformStyle.itemHeight
            anchors.left: parent.left
            anchors.right: parent.right

            MouseArea {
                id: delegateMouseArea
                anchors.fill: parent;
                onPressed: selectedIndex = index;
                onClicked:  {
                    if(model.enabled)
                        accept();
                }
            }

            Rectangle {
                id: backgroundRect
                anchors.fill: parent
                color: (delegateItem.selected && model.enabled) ? root.platformStyle.itemSelectedBackgroundColor : root.platformStyle.itemBackgroundColor
            }

            BorderImage {
                id: background
                anchors.fill: parent
                border { left: 22; top: 22; right: 22; bottom: 22 }
                source: delegateMouseArea.pressed ? root.platformStyle.itemPressedBackground :
                        delegateItem.selected ? root.platformStyle.itemSelectedBackground :
                        root.platformStyle.itemBackground
            }

            Text {
                id: itemText
                elide: Text.ElideRight
                color: !model.enabled ? "gray" :
                       delegateItem.selected ? root.platformStyle.itemSelectedTextColor : root.platformStyle.itemTextColor
                anchors.verticalCenter: delegateItem.verticalCenter
                anchors.left: parent.left
                anchors.right: parent.right
                anchors.leftMargin: root.platformStyle.itemLeftMargin
                anchors.rightMargin: root.platformStyle.itemRightMargin
                text: model.name;
                font: root.platformStyle.itemFont
            }
        }
    }
}
